#ifndef __GLOBAL_INTERFACE_H__
#define __GLOBAL_INTERFACE_H__

#include <stdio.h>
#include <linux/videodev2.h>

struct buffer {
    void *start;
    size_t length;
    int export_fd;
    int sequence;
};

typedef struct _taiic_rkisp_context {
    char                    out_file[255];
    char                    dev_name[255];
    char                    sns_name[32];
    int                     width;
    int                     height;
    int                     format;
    int                     fd;
    enum v4l2_buf_type      buf_type;
    struct buffer           *buffers;
    unsigned int            n_buffers;
    int                     frame_count;
    FILE                    *fp;
    void                    *aiq_ctx;
    int                     rkaiq;
    int                     writeFile;
    int                     outputCnt;
    int                     skipCnt;
    int                     ctl_type;
    char                    iqpath[255];
} taiic_rkisp_s;

// typedef void  (*errno_exit_func)(taiic_rkisp_s *ctx, const char *s);
// typedef char* (*get_sensor_name_func)(taiic_rkisp_s* ctx);
// typedef char* (*get_dev_name_func)(taiic_rkisp_s* ctx);
// typedef int   (*xioctl_func)(int fh, int request, void *arg);
// typedef void  (*init_rkisp_ctx_func)(taiic_rkisp_s *ctx);
// typedef void  (*init_rkisp_routine_func)(taiic_rkisp_s *ctx);
// typedef void  (*open_device_func)(taiic_rkisp_s *ctx);
// typedef void  (*init_device_func)(taiic_rkisp_s *ctx);
// typedef void  (*init_mmap_func)(int pp_onframe, taiic_rkisp_s *ctx);
// typedef void  (*start_capturing_func)(taiic_rkisp_s *ctx);
// typedef int   (*read_frame_func)(taiic_rkisp_s *ctx);
// typedef void  (*process_image_func)(const void *p, int sequence, int size, taiic_rkisp_s *ctx);
// typedef void  (*stop_capturing_func)(taiic_rkisp_s *ctx);
// typedef void  (*close_device_func)(taiic_rkisp_s *ctx);
// typedef void  (*uninit_device_func)(taiic_rkisp_s *ctx);
// typedef void  (*deinit_rkisp_func)(taiic_rkisp_s *ctx);
typedef int   (*test_module_send_func)(void *data, unsigned short data_len);

typedef struct
{
    // errno_exit_func         errno_exit_f;
    // get_sensor_name_func    get_sensor_name_f;
    // get_dev_name_func       get_dev_name_f;
    // xioctl_func             xioctl_f;
    // init_rkisp_ctx_func     init_rkisp_ctx_f;
    // init_rkisp_routine_func init_rkisp_routine_f;
    // open_device_func        open_device_f;
    // init_device_func        init_device_f;
    // init_mmap_func          init_mmap_f;
    // start_capturing_func    start_capturing_f;
    // read_frame_func         read_frame_f;
    // process_image_func      process_image_f;
    // stop_capturing_func     stop_capturing_f;
    // close_device_func       close_device_f;
    // uninit_device_func      uninit_device_f;
    // deinit_rkisp_func       deinit_rkisp_f;
    test_module_send_func   test_module_send_f;
}testModuleExternalInterface_t;

// 注册需要使用的接口
int testModuleRegisterInterfaceFunc(testModuleExternalInterface_t *in_data);
// 接收外部输入的命令
int testModuleRecvCommandDataFunc(void *data, unsigned short data_len);

#endif
